package com.allen.study.application.api.assembler.mapper;

import com.allen.study.application.api.request.DepartmentCreateRequest;
import com.allen.study.application.api.request.DepartmentQueryRequest;
import com.allen.study.application.api.request.DepartmentUpdateRequest;
import com.allen.study.application.api.response.DepartmentQueryResponse;
import com.allen.study.application.api.response.DepartmentResponse;
import com.allen.study.domain.entity.Department;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 部门信息表数据传输对象结构映射
 *
 * @author AllenSun
 * @since 2025-04-23 20:46
 */
@Mapper
public interface IDepartmentDTOStructMapper {

    /**
     * 部门信息表数据传输对象结构映射实例
     */
    IDepartmentDTOStructMapper INSTANCE = Mappers.getMapper(IDepartmentDTOStructMapper.class);

    /**
     * 部门信息表创建请求数据传输对象 转 部门信息表实体
     *
     * @param createRequest 部门信息表创建请求数据传输对象
     * @return 部门信息表实体
     */
    Department fromCreateRequest(DepartmentCreateRequest createRequest);

    /**
     * 部门信息表更新请求数据传输对象 转 部门信息表实体
     *
     * @param updateRequest 部门信息表更新请求数据传输对象
     * @return 部门信息表实体
     */
    Department fromUpdateRequest(DepartmentUpdateRequest updateRequest);

    /**
     * 部门信息表查询请求数据传输对象 转 部门信息表实体
     *
     * @param queryRequest 部门信息表查询请求数据传输对象
     * @return 部门信息表实体
     */
    Department fromQueryRequest(DepartmentQueryRequest queryRequest);

    /**
     * 部门信息表实体 转 部门信息表响应数据传输对象
     *
     * @param department 部门信息表实体
     * @return 部门信息表响应数据传输对象
     */
    DepartmentResponse toResponse(Department department);

    /**
     * 部门信息表实体 转 部门信息表查询响应数据传输对象
     *
     * @param department 部门信息表实体
     * @return 部门信息表查询响应数据传输对象
     */
    DepartmentQueryResponse toQueryResponse(Department department);

    /**
     * 部门信息表实体列表 转 部门信息表查询响应数据传输对象列表
     *
     * @param departmentList 部门信息表实体列表
     * @return 部门信息表查询响应数据传输对象列表
     */
    List<DepartmentQueryResponse> toQueryResponse(List<Department> departmentList);
}
